# is判定的结果是False
# 分析：[] is [] 构成了一个表达式，在内存中依次申请开辟了两块内存，分别用来放[]和[]，表达式得出结果后内存释放
#       内存实际的操作流程是，[1]内存申请->[2]内存申请--（表达式计算结果）-->[1]内存释放->[2]内存释放
print([] is [])

# 输出的结果是两个地址相同
# 分析：[]被当作参数传入函数id()中，id()函数运行完毕，[]内存释放
#       后面的[]被当作参数传入函数id()中，id()函数运行完毕，[]内存释放
#       内存实际的操作流程是，[1]内存申请--（id函数得出结果）-->[1]内存释放->[2]内存申请--（id函数得出结果）-->[2]内存释放
#       [2]内存申请到了[1]之前用过的内存地址，所以打印出来的地址是相同的
print(id([]), id([]))

# 验证（正好用到了今天学到的新知识__del__）：
class A:

    def __init__(self):
        print("A __init__ %d" % id(self))

    def __del__(self):
        print("A __del__ %d" % id(self))

print("-" * 20)
print(A() is A())

print("-" * 20)
print(id(A()), id(A()))

# 输出结果

# False
# 1668655674184 1668655674184
# --------------------
# A __init__ 1668655671056
# A __init__ 1668655671000
# A __del__ 1668655671056
# A __del__ 1668655671000
# False
# --------------------
# A __init__ 1668655671112
# A __del__ 1668655671112
# A __init__ 1668655671112
# A __del__ 1668655671112
# 1668655671112 1668655671112